package cn.org.xiaoweiba.main.utils;

import lombok.extern.log4j.Log4j2;

import java.io.*;
import java.util.Objects;

/**
 * 和文件相关的工具类
 */
@Log4j2
public class FileUtil {

    private FileUtil() {
    }

    /**
     * 获取当前项目的根目录的绝对路径，发生异常的话，返回 ""
     * 代码参考自：https://blog.csdn.net/zhyp29/article/details/123098048
     *
     * @return 当前项目的根目录的绝对路径
     */
    public static String getProjectRootPath() {
        try {
            // 得到当前项目的根目录对象
            File dir = new File("");
            // 返回当前项目根目录的绝对路径
            return dir.getCanonicalPath();
        } catch (IOException e) {
            log.error("获取当前项目的根目录的绝对路径发生异常", e);
        }
        return "";
    }

    /**
     * 获取当前项目的类根路径的绝对路径，发生异常的话，返回 ""
     * 代码参考：https://blog.csdn.net/zhyp29/article/details/123098048
     *
     * @return 当前项目的类根路径的绝对路径
     */
    public static String getClassRootPath() {
        try {
            // 获取当前项目类加载根目录对象
            File dir = new File(Objects.requireNonNull(FileUtil.class.getResource("/")).getPath());
            // 返回当前项目类加载根目录的绝对路径
            return dir.getCanonicalPath();
        } catch (IOException e) {
            log.error("获取当前项目的类根路径的绝对路径发生异常", e);
        }
        return "";
    }

    /**
     * 以字符形式读取文件内容，发生异常的话，返回 ""
     *
     * @param filePath 文件路径
     * @return 文件的内容(字符串形式)
     */
    public static String readFileByChar(String filePath) {
        // 得到文件对象
        File file = new File(filePath);
        // 存储文件的完成内容
        StringBuilder fileContent = new StringBuilder();
        // try 资源自动管理，实现资源的自动关闭
        try (
                // 输入流
                FileInputStream fileInputStream = new FileInputStream(file);
                InputStreamReader reader = new InputStreamReader(fileInputStream);
                BufferedReader bufferedReader = new BufferedReader(reader)
        ) {
            // 读取文件内容时的缓存
            String buf = "";
            // 读取文件内容
            while ((buf = bufferedReader.readLine()) != null) {
                // 保存读取的文件内容
                fileContent.append(buf);
            }
            return fileContent.toString();
        } catch (Exception e) {
            log.error("以字符形式读取文件内容时发生异常", e);
        }
        return "";
    }



}
